home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmiSoft / Misc / emu / Wzonka-Lad.lha / Wzonka-Lad / src / planar_to_chunky.s < prev    next >
Text File  |  1999-04-15  |  12KB  |  482 lines

  1.  
  2. create_planar_to_chunky_table:
  3.         move.l    planar_to_chunky_table_background,a0
  4.         move.b    #$00,d1
  5.         move.b    #$01,d2
  6.         move.b    #$02,d3
  7.         move.b    #$03,d4
  8.  
  9. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  10. ;        planar to chunky table creator
  11. ;        INPUT:
  12. ;        a0    = table ($10000*8).
  13. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  14.  
  15.         move.l    #$10000,d0
  16.         moveq.l    #0,d1
  17.  
  18. create_planar_to_chunky_table_loop:
  19.         moveq.l    #8-1,d2
  20.  
  21. create_planar_to_chunky_table_bits_to_bytes:
  22.         move.w    d1,d3
  23.         move.w    d1,d4
  24.         lsr.w    #8,d3
  25.         lsr.b    d2,d4
  26.         lsr.b    d2,d3
  27.         lsl.b    #1,d4
  28.         and.b    #%1,d3
  29.         and.b    #%10,d4
  30.         or.b    d3,d4
  31.         move.b    d4,(a0)+
  32.         dbra    d2,create_planar_to_chunky_table_bits_to_bytes
  33.  
  34.         addq.w    #1,d1
  35.         subq.l    #1,d0
  36.         bne.s    create_planar_to_chunky_table_loop
  37.         rts
  38.  
  39. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  40. ;        chunky output the data
  41. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  42.  
  43. screen_draw_for_chunky_output_out:
  44.         move.l    gameboy_chunky_buffer,a0
  45.         move.l    game_array,a1
  46.         move.l    pen_conversion_table,a2
  47.         add.l    chunky_scroll_x,a0
  48.         move.l    chunky_scroll_y,d0
  49.         mulu.w    #160+8+8,d0
  50.         add.l    d0,a0
  51.         moveq.l    #0,d7
  52.         add.l    #(160+8+8)*16+8,a0
  53.  
  54. screen_draw_for_chunky_output_out_convert:
  55.         move.w    #144-1,d0
  56.  
  57. screen_draw_for_chunky_output_out_copy:
  58.         moveq.l    #160/4/4-1,d1
  59.  
  60. screen_draw_for_chunky_output_out_copy_loop:
  61.         move.w    (a0)+,d7
  62.         move.w    (a2,d7.l*2),(a1)+
  63.         move.w    (a0)+,d7
  64.         move.w    (a2,d7.l*2),(a1)+
  65.         move.w    (a0)+,d7
  66.         move.w    (a2,d7.l*2),(a1)+
  67.         move.w    (a0)+,d7
  68.         move.w    (a2,d7.l*2),(a1)+
  69.         move.w    (a0)+,d7
  70.         move.w    (a2,d7.l*2),(a1)+
  71.         move.w    (a0)+,d7
  72.         move.w    (a2,d7.l*2),(a1)+
  73.         move.w    (a0)+,d7
  74.         move.w    (a2,d7.l*2),(a1)+
  75.         move.w    (a0)+,d7
  76.         move.w    (a2,d7.l*2),(a1)+
  77.         dbra    d1,screen_draw_for_chunky_output_out_copy_loop
  78.  
  79.         add.l    #16,a0
  80.         dbra    d0,screen_draw_for_chunky_output_out_copy
  81.  
  82. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  83. ;        output the data
  84. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  85.  
  86. screen_draw_for_chunky_output_out_array:
  87.         move.l    game_array,a2
  88.         move.l    #159,d2
  89.         move.l    #143,d3
  90.  
  91. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  92. ;        output the data
  93. ;        INPUT:
  94. ;        d2    = output x.
  95. ;        d3    =        y.
  96. ;        a2    = input array.
  97. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  98.  
  99.         move.l    wzonka_ptr,a0
  100.         move.l    wd_rport(a0),a0
  101.         moveq.l    #0,d0
  102.         moveq.l    #0,d1
  103.  
  104.         move.l    graphics_base,a6
  105.         move.l    game_output_tmp_rast_port,a1
  106.         jsr    WritePixelArray8(a6)
  107.         rts
  108.  
  109. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  110. ;        screen draw for chunky output
  111. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  112.  
  113. screen_draw_for_chunky_output:
  114.         move.l    gb_memory,a6
  115.         moveq.l    #0,d7
  116.         add.l    #$ff40,a6            ;lcd control.
  117.         move.b    (a6),d7
  118.         btst    #7,d7                ;lcd operation?
  119.         beq.s    screen_draw_for_chunky_output_no_chunky_output
  120.                             ;nope. empty.
  121.         move.l    d7,lcd_control
  122.  
  123.         bsr.b    screen_draw_for_chunky_output_palette
  124.         bsr.w    screen_draw_for_chunky_output_background
  125.         bsr.w    screen_draw_for_chunky_output_window
  126.  
  127. screen_draw_for_chunky_output_no_chunky_output:
  128.         rts
  129.  
  130. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  131. ;        palette
  132. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  133.  
  134. screen_draw_for_chunky_output_palette:
  135.         move.l    gb_memory,a0
  136.         moveq.l    #0,d0
  137.         add.l    #$ff47,a0            ;bgrdpal (background palette).
  138.         move.b    (a0),d0                ;d0 = palette byte.
  139.  
  140.         move.b    back_ground_colour_byte,d5
  141.         cmp.b    d5,d0
  142.         beq.s    screen_draw_for_chunky_output_palette_done
  143.         move.b    d0,back_ground_colour_byte
  144.         eor.b    d0,d5
  145.  
  146.         lea    pen_list,a2
  147.         lea    gameboy_colours_conversion_table,a1
  148.         moveq.l    #4-1,d7
  149.  
  150. screen_draw_for_chunky_output_palette_1st:
  151.         move.l    d0,d1
  152.         and.b    #%11,d1
  153.         move.b    (a2,d1.l),(a1)+
  154.         lsr.b    #2,d0
  155.         dbra    d7,screen_draw_for_chunky_output_palette_1st
  156.  
  157.         lea    gameboy_colours_conversion_table,a0
  158.         move.l    pen_conversion_table,a1
  159.         moveq.l    #0,d3
  160.         moveq.l    #0,d7
  161.  
  162.         move.b    d5,d0
  163.         and.b    #%11,d0
  164.         beq.s    screen_draw_for_chunky_output_palette_ncc_0
  165.         bsr.b    chunky_output_do_conversion_table_x
  166.  
  167. screen_draw_for_chunky_output_palette_ncc_0:
  168.         move.b    d5,d0
  169.         and.b    #%1100,d0
  170.         beq.s    screen_draw_for_chunky_output_palette_ncc_1
  171.         move.b    #1,d7
  172.         bsr.b    chunky_output_do_conversion_table_x
  173.  
  174. screen_draw_for_chunky_output_palette_ncc_1:
  175.         move.b    d5,d0
  176.         and.b    #%110000,d0
  177.         beq.s    screen_draw_for_chunky_output_palette_ncc_2
  178.         move.b    #2,d7
  179.         bsr.b    chunky_output_do_conversion_table_x
  180.  
  181. screen_draw_for_chunky_output_palette_ncc_2:
  182.         move.b    d5,d0
  183.         and.b    #%11000000,d0
  184.         beq.s    screen_draw_for_chunky_output_palette
  185.         move.b    #3,d7
  186.         bsr.b    chunky_output_do_conversion_table_x
  187.  
  188. screen_draw_for_chunky_output_palette_done:
  189.         rts
  190.  
  191. chunky_output_do_conversion_table_x:
  192.         move.b    (a0,d7.w),d4
  193.         moveq.l    #16-1,d1
  194.         move.b    d7,d6
  195.         lsl.w    #8,d4
  196.         lsl.w    #8,d6
  197.         lea    16(a0),a2
  198.  
  199. chunky_output_do_conversion_table_copy_x:
  200.         move.w    d4,d2
  201.         move.w    d6,d3
  202.         move.b    -(a2),d2
  203.         move.b    d1,d3
  204.         move.w    d2,(a1,d3.l*2)
  205.         ror.w    #8,d2
  206.         ror.w    #8,d3
  207.         move.w    d2,(a1,d3.l*2)
  208.         dbra    d1,chunky_output_do_conversion_table_copy_x
  209.         rts
  210.  
  211. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  212. ;        background
  213. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  214.  
  215. screen_draw_for_chunky_output_background:
  216.         move.l    lcd_control,d0
  217.         btst    #0,d0                ;background display?
  218.         beq.w    screen_draw_for_chunky_output_background_exit
  219.                             ;no. quit.
  220.         move.l    gb_memory,a0
  221.         move.l    a0,a1
  222.         add.l    #$ff42,a1            ;lcd control.
  223.         moveq.l    #0,d2
  224.         move.b    (a1)+,d2            ;bg scroll y.
  225.         moveq.l    #0,d3
  226.         move.b    (a1),d3                ;bg scroll x.
  227.  
  228.         move.l    d0,d1                ;d1 = the control byte.
  229.         and.b    #%1000,d0            ;d0 = background tiles.
  230.         lsl.w    #7,d0                ;0/1 * 1024.
  231.         move.l    a0,a1
  232.         add.l    #$9800,a1            ;tile position.
  233.         add.l    d0,a1                ;selected position.
  234.                             ;a1 = input tiles.
  235.         and.b    #%10000,d1            ;d1 = background tile
  236.         move.l    d1,d6                ;datas. 0/1 * 2048.
  237.         lsl.b    #3,d6                ;d6 = tile adder (signed/
  238.         bchg    #7,d6                ;unsigned).
  239.         lsl.w    #7,d1
  240.         move.l    a0,a2
  241.         add.l    #$8800,a2            ;tile data position.
  242.         sub.l    d1,a2                ;selected position.
  243.                             ;a2 = input tile datas.
  244. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  245. ;        copy background data
  246. ;        INPUT:
  247. ;        d2    = background scroll y.
  248. ;        d3    = background scroll x.
  249. ;        d6    = tile adder.
  250. ;        a1    = tiles.
  251. ;        a2    = tile datas.
  252. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  253.  
  254.         move.l    d2,d4
  255.         and.b    #%11111000,d2
  256.  
  257.         move.l    d3,d5
  258.         lsr.b    #3,d3
  259.  
  260.         and.b    #%111,d4
  261.         and.b    #%111,d5
  262.         move.l    d4,chunky_scroll_y
  263.         move.l    d5,chunky_scroll_x
  264.  
  265. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  266. ;        INPUT:
  267. ;        d2    = (background start y) / 8 * 8.
  268. ;        d3    = (background start x) / 8.
  269. ;        d6    = tile adder.
  270. ;        a1    = tiles.
  271. ;        a2    = tile pattern datas.
  272. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  273.  
  274.         lsl.w    #2,d2
  275.         move.l    gameboy_chunky_buffer,a0    ;(160+8+8)x(144+16+16).
  276.         move.l    planar_to_chunky_table_background,a6
  277.                             ;planar to chunky table.
  278.         lea    4(a6),a5
  279.  
  280.         moveq.l    #19-1,d0            ;y.
  281.         moveq.l    #0,d5
  282.         move.l    #(160+8+8)*7+8,a4
  283.         add.l    #16*(160+8+8)+8,a0
  284.  
  285. screen_draw_for_chunky_output_background_y:
  286.         moveq.l    #21-1,d1            ;x.
  287.         move.l    d3,d4
  288.  
  289. screen_draw_for_chunky_output_background_x:
  290.         move.l    d6,d7
  291.         lea    (a1,d2.w),a3            ;y.
  292.         add.b    (a3,d4.w),d7            ;x.
  293.         lsl.w    #4,d7
  294.         lea    (a2,d7.w),a3
  295.  
  296.         move.w    (a3)+,d5
  297.         move.l    (a6,d5.l*8),(a0)
  298.         move.l    (a5,d5.l*8),4(a0)
  299.  
  300.         move.w    (a3)+,d5
  301.         move.l    (a6,d5.l*8),176(a0)
  302.         move.l    (a5,d5.l*8),180(a0)
  303.  
  304.         move.w    (a3)+,d5
  305.         move.l    (a6,d5.l*8),352(a0)
  306.         move.l    (a5,d5.l*8),356(a0)
  307.  
  308.         move.w    (a3)+,d5
  309.         move.l    (a6,d5.l*8),528(a0)
  310.         move.l    (a5,d5.l*8),532(a0)
  311.  
  312.         move.w    (a3)+,d5
  313.         move.l    (a6,d5.l*8),704(a0)
  314.         move.l    (a5,d5.l*8),708(a0)
  315.  
  316.         move.w    (a3)+,d5
  317.         move.l    (a6,d5.l*8),880(a0)
  318.         move.l    (a5,d5.l*8),884(a0)
  319.  
  320.         move.w    (a3)+,d5
  321.         move.l    (a6,d5.l*8),1056(a0)
  322.         move.l    (a5,d5.l*8),1060(a0)
  323.  
  324.         move.w    (a3),d5
  325.         move.l    (a6,d5.l*8),1232(a0)
  326.         move.l    (a5,d5.l*8),1236(a0)
  327.  
  328.         addq.b    #1,d4
  329.         addq.l    #8,a0
  330.         and.b    #%11111,d4
  331.         dbra    d1,screen_draw_for_chunky_output_background_x
  332.  
  333.         add.w    #32,d2
  334.         add.l    a4,a0
  335.         and.w    #%1111111111,d2
  336.         dbra    d0,screen_draw_for_chunky_output_background_y
  337.  
  338. screen_draw_for_chunky_output_background_exit:
  339.         rts
  340.  
  341. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  342. ;        window
  343. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  344.  
  345. screen_draw_for_chunky_output_window:
  346.         move.l    lcd_control,d0
  347.         btst    #5,d0                ;window display?
  348.         beq.w    screen_draw_for_chunky_output_window_exit
  349.  
  350.         move.l    gb_memory,a0            ;a0 = the fixed 16bit
  351.         move.l    a0,a1                ;memory area.
  352.         move.l    a0,a2
  353.  
  354.         add.l    #$9800,a0            ;window tiles.
  355.         and.b    #%1000000,d0            ;d0 = tile position.
  356.         lsl.w    #4,d0                ;d0 = 0/1 * 1024.
  357.         add.l    d0,a0                ;a0 = window tiles.
  358.  
  359.         add.l    #$8800,a1            ;a1 = window tile pattern table.
  360.  
  361.         add.l    #$ff4a,a2            ;a2 = window y position.
  362.         moveq.l    #0,d0
  363.         move.b    (a2)+,d0            ;d0 = window y pos ($ff4A).
  364.         moveq.l    #0,d1
  365.         move.b    (a2),d1                ;d1 = window x pos ($ff4B).
  366.         subq.w    #7,d1
  367.         bge.s    screen_draw_for_chunky_output_window_ok_x
  368.         moveq.l    #0,d1
  369.  
  370. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  371. ;        INPUT:
  372. ;        d0    = window y position.
  373. ;        d1    = window x position.
  374. ;        a0    = window tiles.
  375. ;        a1    = window tile pattern table.
  376. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  377.  
  378. screen_draw_for_chunky_output_window_ok_x:
  379.         move.w    #160,d2
  380.         sub.w    d1,d2
  381.         ble.w    screen_draw_for_chunky_output_window_exit
  382.         move.w    #144,d3
  383.         sub.w    d0,d3
  384.         ble.w    screen_draw_for_chunky_output_window_exit
  385.  
  386.         add.l    chunky_scroll_x,d1
  387.         add.l    chunky_scroll_y,d0
  388.         add.w    #16,d0
  389.         move.l    gameboy_chunky_buffer,a2
  390.         mulu.w    #160+8+8,d0
  391.         addq.l    #8,d1
  392.         add.l    d0,a2
  393.         add.l    d1,a2
  394.  
  395.         lsr.w    #3,d2
  396.         lsr.w    #3,d3
  397.  
  398.         move.l    planar_to_chunky_table_background,a3
  399.                             ;planar to chunky table.
  400.         lea    4(a3),a4
  401.  
  402. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  403. ;        INPUT:
  404. ;        d2    = x/8.
  405. ;        d3    = y/8.
  406. ;        a0    = window tiles.
  407. ;        a1    = window tile pattern table.
  408. ;        a2    = chunky buffer.
  409. ;        a3    = planar to chunky table.
  410. ;        a4    = a3 + 4.
  411. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  412.  
  413.         move.l    #128,d1
  414.         moveq.l    #0,d5
  415.         move.l    #(160+8+8)*8,d6
  416.         move.l    a2,d4
  417.  
  418. screen_draw_for_chunky_output_window_y:
  419.         move.w    d2,d0
  420.         move.l    a0,a5
  421.         move.l    d4,a2
  422.  
  423. screen_draw_for_chunky_output_window_x:
  424.         move.l    d1,d7
  425.         add.b    (a5)+,d7
  426.         lsl.w    #4,d7
  427.         lea    (a1,d7.w),a6
  428.  
  429.         move.w    (a6)+,d5
  430.         move.l    (a3,d5.l*8),(a2)
  431.         move.l    (a4,d5.l*8),4(a2)
  432.  
  433.         move.w    (a6)+,d5
  434.         move.l    (a3,d5.l*8),176(a2)
  435.         move.l    (a4,d5.l*8),180(a2)
  436.  
  437.         move.w    (a6)+,d5
  438.         move.l    (a3,d5.l*8),352(a2)
  439.         move.l    (a4,d5.l*8),356(a2)
  440.  
  441.         move.w    (a6)+,d5
  442.         move.l    (a3,d5.l*8),528(a2)
  443.         move.l    (a4,d5.l*8),532(a2)
  444.  
  445.         move.w    (a6)+,d5
  446.         move.l    (a3,d5.l*8),704(a2)
  447.         move.l    (a4,d5.l*8),708(a2)
  448.  
  449.         move.w    (a6)+,d5
  450.         move.l    (a3,d5.l*8),880(a2)
  451.         move.l    (a4,d5.l*8),884(a2)
  452.  
  453.         move.w    (a6)+,d5
  454.         move.l    (a3,d5.l*8),1056(a2)
  455.         move.l    (a4,d5.l*8),1060(a2)
  456.  
  457.         move.w    (a6),d5
  458.         move.l    (a3,d5.l*8),1232(a2)
  459.         move.l    (a4,d5.l*8),1236(a2)
  460.  
  461.         addq.l    #8,a2
  462.         dbra    d0,screen_draw_for_chunky_output_window_x
  463.  
  464.         add.l    d6,d4
  465.         add.l    #32,a0
  466.         dbra    d3,screen_draw_for_chunky_output_window_y
  467.  
  468. screen_draw_for_chunky_output_window_exit:
  469.         rts
  470.  
  471. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  472. ;        variables
  473. ;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  474.  
  475. chunky_scroll_x:dc.l    0
  476. chunky_scroll_y:dc.l    0
  477.  
  478. gameboy_chunky_buffer:
  479.         dc.l    0
  480. planar_to_chunky_table_background:
  481.         dc.l    0
  482.